﻿// B. Reverse Sort.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1605/B

Ashish 有一个长度为 n 的二进制字符串 s，他想按不递减的顺序排序。
他可以执行以下操作：

选择任意长度的子序列，使其元素按非递增顺序排列。形式上，选择任意 k，使得 1≤k≤n 和任意 k 索引序列 1≤i1<i2<...<ik≤n ，使得 si1≥si2≥...≥sik 。
就地反转这个子序列。形式上，用 sik 交换 si1，用 sik-1 交换 si2，...，用 si⌊k/2⌋ 交换 si⌈k/2⌉+1（这里⌊x⌋ 表示不超过 x 的最大整数，⌈x⌉ 表示不小于 x 的最小整数）。
求按不递减的顺序对字符串排序所需的最少操作数。可以证明，对给定的二进制字符串进行排序总是最多需要 n 次运算。

输入
第一行包含一个整数 t（1≤t≤1000）--测试用例数。下面是测试用例的说明。

每个测试用例的第一行包含一个整数 n（1≤n≤1000）--二进制字符串 s 的长度。

每个测试用例的第二行包含一个长度为 n 的二进制字符串 s，其中只包含 0 和 1。

保证所有测试用例中 n 的总和不超过 1000。

输出
每个测试用例的输出如下：

第一行的最小操作数 m（0≤m≤n）。
下面 m 行的每一行应为： k i1 i2 ... ik
其中 k 是长度，i1<i2<...<ik 是所选子序列的索引。对于它们，声明中的条件必须成立。

InputCopy
3
7
0011111
5
10100
6
001000
OutputCopy
0
1
4 1 3 4 5
1
3 3 5 6

注意
在第一个测试用例中，二进制字符串已按非递减顺序排序。

在第二个测试用例中，我们可以执行以下操作：

k=4: 选择索引 {1,3,4,5}
在第三个测试案例中，我们可以执行以下操作：

k=3：选择索引 {3,5,6}


*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;



string str;
int T;


void solve() {
	int n; cin >> n;
	cin >> str;
	str.insert(str.begin(), '#');

	int l = 1; int r = str.size() - 1;
	vector<int> ans;
	while (l < r) {
		while (l < str.size() && str[l] == '0') l++;
		if (l >= str.size()) break;
		while (r >0  && str[r] == '1')r--;
		if (r > 0 && l < r) {
			ans.push_back(l); ans.push_back(r);
		}
		l++; r--;
	}
	sort(ans.begin(), ans.end());
	if (ans.empty()) {
		cout << 0 << endl; return;
	}
	else {
		cout << 1 << endl;
		cout << ans.size() << endl;
	}
	for (int i = 0; i < ans.size(); i++) {
		cout << ans[i] << " ";
	}
	cout << endl;
}



int main()
{
	cin >> T;
	while (T--) {
		solve();
	}

	return 0;
}

 